Skip to content
This repository was archived by the owner on Feb 20, 2023. It is now read-only.

Commit 610cefd

Browse files
committed
Telemetry for credit card autofill
1 parent ef036f3 commit 610cefd

File tree

13 files changed

+823
-5
lines changed

13 files changed

+823
-5
lines changed

app/docs/metrics.md

Lines changed: 446 additions & 0 deletions
Large diffs are not rendered by default.

app/metrics.yaml

Lines changed: 154 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5809,3 +5809,157 @@ recent_tabs:
58095809
notification_emails:
58105810
- android-probes@mozilla.com
58115811
expires: "2022-06-23"
5812+
credit_cards:
5813+
saved:
5814+
type: counter
5815+
description: |
5816+
A counter of the number of credit cards that have been saved
5817+
manually by the user.
5818+
send_in_pings:
5819+
- metrics
5820+
bugs:
5821+
- TODO
5822+
data_reviews:
5823+
- TODO
5824+
data_sensitivity:
5825+
- interaction
5826+
notification_emails:
5827+
- android-probes@mozilla.com
5828+
expires: "2022-09-01"
5829+
deleted:
5830+
type: counter
5831+
description: |
5832+
A counter of the number of credit cards that have been deleted by
5833+
the user.
5834+
send_in_pings:
5835+
- metrics
5836+
bugs:
5837+
- TODO
5838+
data_reviews:
5839+
- TODO
5840+
data_sensitivity:
5841+
- interaction
5842+
notification_emails:
5843+
- android-probes@mozilla.com
5844+
expires: "2022-09-01"
5845+
modified:
5846+
type: counter
5847+
description: |
5848+
A counter of the number of credit cards that have been modified by
5849+
the user.
5850+
send_in_pings:
5851+
- metrics
5852+
bugs:
5853+
- TODO
5854+
data_reviews:
5855+
- TODO
5856+
data_sensitivity:
5857+
- interaction
5858+
notification_emails:
5859+
- android-probes@mozilla.com
5860+
expires: "2022-09-01"
5861+
form_detected:
5862+
type: event
5863+
description: |
5864+
A credit card form was detected.
5865+
send_in_pings:
5866+
- metrics
5867+
bugs:
5868+
- TODO
5869+
data_reviews:
5870+
- TODO
5871+
data_sensitivity:
5872+
- interaction
5873+
notification_emails:
5874+
- android-probes@mozilla.com
5875+
expires: "2022-09-01"
5876+
autofilled:
5877+
type: event
5878+
description: |
5879+
User has autofilled a credit card.
5880+
send_in_pings:
5881+
- metrics
5882+
bugs:
5883+
- TODO
5884+
data_reviews:
5885+
- TODO
5886+
data_sensitivity:
5887+
- interaction
5888+
notification_emails:
5889+
- android-probes@mozilla.com
5890+
expires: "2022-09-01"
5891+
autofill_prompt_shown:
5892+
type: event
5893+
description: |
5894+
Credit card autofill prompt was shown.
5895+
send_in_pings:
5896+
- metrics
5897+
bugs:
5898+
- TODO
5899+
data_reviews:
5900+
- TODO
5901+
data_sensitivity:
5902+
- interaction
5903+
notification_emails:
5904+
- android-probes@mozilla.com
5905+
expires: "2022-09-01"
5906+
autofill_prompt_expanded:
5907+
type: event
5908+
description: |
5909+
Credit card autofill prompt was expanded.
5910+
send_in_pings:
5911+
- metrics
5912+
bugs:
5913+
- TODO
5914+
data_reviews:
5915+
- TODO
5916+
data_sensitivity:
5917+
- interaction
5918+
notification_emails:
5919+
- android-probes@mozilla.com
5920+
expires: "2022-09-01"
5921+
autofill_prompt_dismissed:
5922+
type: event
5923+
description: |
5924+
Credit card autofill prompt was dismissed.
5925+
send_in_pings:
5926+
- metrics
5927+
bugs:
5928+
- TODO
5929+
data_reviews:
5930+
- TODO
5931+
data_sensitivity:
5932+
- interaction
5933+
notification_emails:
5934+
- android-probes@mozilla.com
5935+
expires: "2022-09-01"
5936+
management_add_tapped:
5937+
type: event
5938+
description: |
5939+
User has tapped the add button through credit card management settings.
5940+
send_in_pings:
5941+
- metrics
5942+
bugs:
5943+
- TODO
5944+
data_reviews:
5945+
- TODO
5946+
data_sensitivity:
5947+
- interaction
5948+
notification_emails:
5949+
- android-probes@mozilla.com
5950+
expires: "2022-09-01"
5951+
management_card_tapped:
5952+
type: event
5953+
description: |
5954+
User has tapped on a saved card through credit card management settings.
5955+
send_in_pings:
5956+
- metrics
5957+
bugs:
5958+
- TODO
5959+
data_reviews:
5960+
- TODO
5961+
data_sensitivity:
5962+
- interaction
5963+
notification_emails:
5964+
- android-probes@mozilla.com
5965+
expires: "2022-09-01"

app/src/main/java/org/mozilla/fenix/components/metrics/Event.kt

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -252,6 +252,18 @@ sealed class Event {
252252
object AndroidAutofillRequestWithLogins : Event()
253253
object AndroidAutofillRequestWithoutLogins : Event()
254254

255+
// Credit cards
256+
object CreditCardSaved : Event()
257+
object CreditCardDeleted : Event()
258+
object CreditCardModified : Event()
259+
object CreditCardFormDetected : Event()
260+
object CreditCardAutofilled : Event()
261+
object CreditCardAutofillPromptShown : Event()
262+
object CreditCardAutofillPromptExpanded : Event()
263+
object CreditCardAutofillPromptDismissed : Event()
264+
object CreditCardManagementAddTapped : Event()
265+
object CreditCardManagementCardTapped : Event()
266+
255267
// Interaction events with extras
256268

257269
data class TopSiteSwipeCarousel(val page: Int) : Event() {

app/src/main/java/org/mozilla/fenix/components/metrics/GleanMetricsService.kt

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import org.mozilla.fenix.GleanMetrics.Collections
2222
import org.mozilla.fenix.GleanMetrics.ContextMenu
2323
import org.mozilla.fenix.GleanMetrics.ContextualMenu
2424
import org.mozilla.fenix.GleanMetrics.CrashReporter
25+
import org.mozilla.fenix.GleanMetrics.CreditCards
2526
import org.mozilla.fenix.GleanMetrics.CustomTab
2627
import org.mozilla.fenix.GleanMetrics.DownloadNotification
2728
import org.mozilla.fenix.GleanMetrics.DownloadsMisc
@@ -863,6 +864,36 @@ private val Event.wrapper: EventWrapper<*>?
863864
is Event.AndroidAutofillConfirmationSuccessful -> EventWrapper<NoExtraKeys>(
864865
{ AndroidAutofill.confirmSuccessful.record(it) }
865866
)
867+
is Event.CreditCardSaved -> EventWrapper<NoExtraKeys>(
868+
{ CreditCards.saved.add(1) }
869+
)
870+
is Event.CreditCardDeleted -> EventWrapper<NoExtraKeys>(
871+
{ CreditCards.deleted.add(1) }
872+
)
873+
is Event.CreditCardModified -> EventWrapper<NoExtraKeys>(
874+
{ CreditCards.modified.add(1) }
875+
)
876+
is Event.CreditCardFormDetected -> EventWrapper<NoExtraKeys>(
877+
{ CreditCards.formDetected.record(it) }
878+
)
879+
is Event.CreditCardAutofillPromptShown -> EventWrapper<NoExtraKeys>(
880+
{ CreditCards.autofillPromptShown.record(it) }
881+
)
882+
is Event.CreditCardAutofillPromptExpanded -> EventWrapper<NoExtraKeys>(
883+
{ CreditCards.autofillPromptExpanded.record(it) }
884+
)
885+
is Event.CreditCardAutofillPromptDismissed -> EventWrapper<NoExtraKeys>(
886+
{ CreditCards.autofillPromptDismissed.record(it) }
887+
)
888+
is Event.CreditCardAutofilled -> EventWrapper<NoExtraKeys>(
889+
{ CreditCards.autofilled.record(it) }
890+
)
891+
is Event.CreditCardManagementAddTapped -> EventWrapper<NoExtraKeys>(
892+
{ CreditCards.managementAddTapped.record(it) }
893+
)
894+
is Event.CreditCardManagementCardTapped -> EventWrapper<NoExtraKeys>(
895+
{ CreditCards.managementCardTapped.record(it) }
896+
)
866897

867898
// Don't record other events in Glean:
868899
is Event.AddBookmark -> null

app/src/main/java/org/mozilla/fenix/components/metrics/MetricController.kt

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import mozilla.components.feature.customtabs.CustomTabsFacts
2121
import mozilla.components.feature.downloads.facts.DownloadsFacts
2222
import mozilla.components.feature.findinpage.facts.FindInPageFacts
2323
import mozilla.components.feature.media.facts.MediaFacts
24+
import mozilla.components.feature.prompts.facts.CreditCardAutofillDialogFacts
2425
import mozilla.components.feature.prompts.facts.LoginDialogFacts
2526
import mozilla.components.feature.pwa.ProgressiveWebAppFacts
2627
import mozilla.components.feature.search.telemetry.ads.AdsTelemetry
@@ -164,6 +165,16 @@ internal class ReleaseMetricController(
164165
Component.FEATURE_PROMPTS to LoginDialogFacts.Items.CANCEL -> Event.LoginDialogPromptCancelled
165166
Component.FEATURE_PROMPTS to LoginDialogFacts.Items.NEVER_SAVE -> Event.LoginDialogPromptNeverSave
166167
Component.FEATURE_PROMPTS to LoginDialogFacts.Items.SAVE -> Event.LoginDialogPromptSave
168+
Component.FEATURE_PROMPTS to CreditCardAutofillDialogFacts.Items.AUTOFILL_CREDIT_CARD_FORM_DETECTED ->
169+
Event.CreditCardFormDetected
170+
Component.FEATURE_PROMPTS to CreditCardAutofillDialogFacts.Items.AUTOFILL_CREDIT_CARD_SUCCESS ->
171+
Event.CreditCardAutofilled
172+
Component.FEATURE_PROMPTS to CreditCardAutofillDialogFacts.Items.AUTOFILL_CREDIT_CARD_PROMPT_SHOWN ->
173+
Event.CreditCardAutofillPromptShown
174+
Component.FEATURE_PROMPTS to CreditCardAutofillDialogFacts.Items.AUTOFILL_CREDIT_CARD_PROMPT_EXPANDED ->
175+
Event.CreditCardAutofillPromptExpanded
176+
Component.FEATURE_PROMPTS to CreditCardAutofillDialogFacts.Items.AUTOFILL_CREDIT_CARD_PROMPT_DISMISSED ->
177+
Event.CreditCardAutofillPromptDismissed
167178

168179
Component.FEATURE_FINDINPAGE to FindInPageFacts.Items.CLOSE -> Event.FindInPageClosed
169180
Component.FEATURE_FINDINPAGE to FindInPageFacts.Items.INPUT -> Event.FindInPageSearchCommitted

app/src/main/java/org/mozilla/fenix/settings/creditcards/CreditCardEditorFragment.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,8 @@ class CreditCardEditorFragment : SecureFragment(R.layout.fragment_credit_card_ed
5858
controller = DefaultCreditCardEditorController(
5959
storage = storage,
6060
lifecycleScope = lifecycleScope,
61-
navController = findNavController()
61+
navController = findNavController(),
62+
requireContext().components.analytics.metrics
6263
)
6364
)
6465

app/src/main/java/org/mozilla/fenix/settings/creditcards/CreditCardsManagementFragment.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,8 @@ class CreditCardsManagementFragment : SecureFragment() {
4949
interactor = DefaultCreditCardsManagementInteractor(
5050
controller = DefaultCreditCardsManagementController(
5151
navController = findNavController()
52-
)
52+
),
53+
requireContext().components.analytics.metrics
5354
)
5455
val binding = ComponentCreditCardsBinding.bind(view)
5556

app/src/main/java/org/mozilla/fenix/settings/creditcards/controller/CreditCardEditorController.kt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@ import kotlinx.coroutines.launch
1212
import mozilla.components.concept.storage.NewCreditCardFields
1313
import mozilla.components.concept.storage.UpdatableCreditCardFields
1414
import mozilla.components.service.sync.autofill.AutofillCreditCardsAddressesStorage
15+
import org.mozilla.fenix.components.metrics.Event
16+
import org.mozilla.fenix.components.metrics.MetricController
1517
import org.mozilla.fenix.settings.creditcards.CreditCardEditorFragment
1618
import org.mozilla.fenix.settings.creditcards.interactor.CreditCardEditorInteractor
1719

@@ -55,6 +57,7 @@ class DefaultCreditCardEditorController(
5557
private val storage: AutofillCreditCardsAddressesStorage,
5658
private val lifecycleScope: CoroutineScope,
5759
private val navController: NavController,
60+
private val metrics: MetricController,
5861
private val ioDispatcher: CoroutineDispatcher = Dispatchers.IO
5962
) : CreditCardEditorController {
6063

@@ -69,6 +72,7 @@ class DefaultCreditCardEditorController(
6972
lifecycleScope.launch(Dispatchers.Main) {
7073
navController.popBackStack()
7174
}
75+
metrics.track(Event.CreditCardDeleted)
7276
}
7377
}
7478

@@ -79,6 +83,7 @@ class DefaultCreditCardEditorController(
7983
lifecycleScope.launch(Dispatchers.Main) {
8084
navController.popBackStack()
8185
}
86+
metrics.track(Event.CreditCardSaved)
8287
}
8388
}
8489

@@ -89,6 +94,7 @@ class DefaultCreditCardEditorController(
8994
lifecycleScope.launch(Dispatchers.Main) {
9095
navController.popBackStack()
9196
}
97+
metrics.track(Event.CreditCardModified)
9298
}
9399
}
94100
}

app/src/main/java/org/mozilla/fenix/settings/creditcards/interactor/CreditCardsManagementInteractor.kt

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
package org.mozilla.fenix.settings.creditcards.interactor
66

77
import mozilla.components.concept.storage.CreditCard
8+
import org.mozilla.fenix.components.metrics.Event
9+
import org.mozilla.fenix.components.metrics.MetricController
810
import org.mozilla.fenix.settings.creditcards.controller.CreditCardsManagementController
911

1012
/**
@@ -34,14 +36,17 @@ interface CreditCardsManagementInteractor {
3436
* all user interactions.
3537
*/
3638
class DefaultCreditCardsManagementInteractor(
37-
private val controller: CreditCardsManagementController
39+
private val controller: CreditCardsManagementController,
40+
private val metrics: MetricController
3841
) : CreditCardsManagementInteractor {
3942

4043
override fun onSelectCreditCard(creditCard: CreditCard) {
4144
controller.handleCreditCardClicked(creditCard)
45+
metrics.track(Event.CreditCardManagementAddTapped)
4246
}
4347

4448
override fun onAddCreditCardClick() {
4549
controller.handleAddCreditCardClicked()
50+
metrics.track(Event.CreditCardManagementCardTapped)
4651
}
4752
}

app/src/test/java/org/mozilla/fenix/components/metrics/GleanMetricsServiceTest.kt

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import org.junit.runner.RunWith
1717
import org.mozilla.fenix.GleanMetrics.Addons
1818
import org.mozilla.fenix.GleanMetrics.Awesomebar
1919
import org.mozilla.fenix.GleanMetrics.BookmarksManagement
20+
import org.mozilla.fenix.GleanMetrics.CreditCards
2021
import org.mozilla.fenix.GleanMetrics.Events
2122
import org.mozilla.fenix.GleanMetrics.History
2223
import org.mozilla.fenix.GleanMetrics.SyncedTabs
@@ -261,4 +262,47 @@ class GleanMetricsServiceTest {
261262
gleanService.track(Event.DefaultBrowserNotifTapped)
262263
assertTrue(Events.defaultBrowserNotifTapped.testHasValue())
263264
}
265+
266+
@Test
267+
fun `credit card events are correctly recorded`() {
268+
assertFalse(CreditCards.saved.testHasValue())
269+
gleanService.track(Event.CreditCardSaved)
270+
assertTrue(CreditCards.saved.testHasValue())
271+
272+
assertFalse(CreditCards.deleted.testHasValue())
273+
gleanService.track(Event.CreditCardDeleted)
274+
assertTrue(CreditCards.deleted.testHasValue())
275+
276+
assertFalse(CreditCards.modified.testHasValue())
277+
gleanService.track(Event.CreditCardModified)
278+
assertTrue(CreditCards.modified.testHasValue())
279+
280+
assertFalse(CreditCards.formDetected.testHasValue())
281+
gleanService.track(Event.CreditCardFormDetected)
282+
assertTrue(CreditCards.formDetected.testHasValue())
283+
284+
assertFalse(CreditCards.autofilled.testHasValue())
285+
gleanService.track(Event.CreditCardAutofilled)
286+
assertTrue(CreditCards.autofilled.testHasValue())
287+
288+
assertFalse(CreditCards.autofillPromptShown.testHasValue())
289+
gleanService.track(Event.CreditCardAutofillPromptShown)
290+
assertTrue(CreditCards.autofillPromptShown.testHasValue())
291+
292+
assertFalse(CreditCards.autofillPromptExpanded.testHasValue())
293+
gleanService.track(Event.CreditCardAutofillPromptExpanded)
294+
assertTrue(CreditCards.autofillPromptExpanded.testHasValue())
295+
296+
assertFalse(CreditCards.autofillPromptDismissed.testHasValue())
297+
gleanService.track(Event.CreditCardAutofillPromptDismissed)
298+
assertTrue(CreditCards.autofillPromptDismissed.testHasValue())
299+
300+
assertFalse(CreditCards.managementAddTapped.testHasValue())
301+
gleanService.track(Event.CreditCardManagementAddTapped)
302+
assertTrue(CreditCards.managementAddTapped.testHasValue())
303+
304+
assertFalse(CreditCards.managementCardTapped.testHasValue())
305+
gleanService.track(Event.CreditCardManagementCardTapped)
306+
assertTrue(CreditCards.managementCardTapped.testHasValue())
307+
}
264308
}

0 commit comments

Comments
 (0)